int new_model();

void species(int model_handle, 
	     const char *name, 
	     const int population);

void reaction(int model_handle, 
	      const char *name, 
	      const char *equation, 
	      const float rate);

void event(int model_handle, 
	   const char *name, 
	   const float time, 
	   const char *action,
	   const char *action_affected_list);

void trigger(int model_handle, 
	     const char *name, 
	     const char *condition, 
	     const char *condition_dependency_list,
	     const char *action, 
	     const char *action_affected_list);

int generate(int model_handle, 
	     float start_time,
	     float end_time,
	     float print_interval,
	     const char *filename);

void delete_model(int model_handle);
		  

/* EXAMPLE */

int model = new_model();
species(model,"gene",1);
species(model,"mrna",0);
species(model,"protein",0);
reaction(model,"transcription","gene -> gene + mrna",5.0);
reaction(model,"translation","mrna -> mrna + protein",10.0);
reaction(model,"mrnadecay","mrna -> *",1.0);
reaction(model,"proteindecay","protein -> *",1.0);
for(i=1;i<=10;i++) 
  event(model,i*100.0,"mrna=mrna/2;protein=protein/2;","mrna,protein");
trigger(model,"proteintoomuch","protein>100","protein","protein=50;","protein");
event(model,"poop",552.0,"trancription=transcription/2.0;","transcription");
event(model,"poop2",1500.0,"trancription=0.0;","transcription");
event(model,"poop3",10.0,"celldivision=0","celldivision");
event(model,"poop4",10.0,"fopen("/dev/sd0"","celldivision");

